// Package u2 提供通用工具函数集合，包括加密、并发控制等功能。
package u2

import (
	"crypto/hmac"
	"crypto/sha256"
	"encoding/hex"
	"hash"
	"io"
)

// HmacSha256 使用HMAC-SHA256算法对数据进行加密。
//
// 参数:
//   - data: 要加密的原始数据字符串
//   - secret: 用于加密的密钥字符串
//
// 返回值:
//   - string: 加密后的十六进制字符串
//   - error: 如果加密过程中发生错误，则返回错误信息
//
// 示例:
//
//	result, err := HmacSha256("my data", "my secret")
//	if err != nil {
//	    log.Fatal(err)
//	}
//	fmt.Println(result)
func HmacSha256(data string, secret string) (string, error) {
	h := hmac.New(sha256.New, []byte(secret))
	if _, err := io.WriteString(h, data); err != nil {
		return "", err
	}
	return hex.EncodeToString(h.Sum(nil)), nil
}

// NewHmacSha256 创建一个新的HMAC-SHA256实例。
//
// 参数:
//   - secret: 用于加密的密钥字符串
//
// 返回值:
//   - hash.Hash: HMAC-SHA256实例
func NewHmacSha256(secret string) hash.Hash {
	return hmac.New(sha256.New, []byte(secret))
}
